package tv.athena.live.api.admin

import android.arch.lifecycle.MutableLiveData
import android.support.v4.util.ArrayMap
import com.yy.liveplatform.proto.nano.LpfChannel
import tv.athena.live.api.callback.Callback
import tv.athena.live.api.callback.IKickOutCallback
import tv.athena.live.api.callback.QueryChatDisableUserCallback
import tv.athena.live.base.arch.IComponentApi
import tv.athena.live.model.bean.LiveDataRet

/**
 * Created by xudadade on 2019-08-09
 *
 */

interface AdminApi : IComponentApi {

    /**
     * 描述：添加频道管理弹窗按钮，点击按钮后弹出面板提供如下功能
     * 1）、主播端可以查看房管列表和禁言列表。
     * 2）、管理员只可以查禁言列表。
     * 3）、普通用户无权限操作，弹提示。
     */
    fun initAdminView(viewResId: ArrayMap<String, Int>)

    /**
     * 描述：是否为频道管理员
     * @param targetUid 目标用户的用户ID
     * @param topSid 频道号
     * @return Boolean true/false
     */
    fun isAdministor(targetUid: Long, topSid: Long): Boolean

    /**
     * 判断该用户是否是禁言用户
     * @param targetUid 目标用户的用户ID
     * @param topSid 频道ID
     *
     */
    fun isChatDisableUser(
            targetUid: Long, topSid: Long,
            callback: QueryChatDisableUserCallback
    )

    /**
     * 禁言用户
     * @param targetUid 目标用户的用户ID
     * @param op true禁言/false解除禁言
     * @return callback 成功、失败回调
     */
    fun blockUserSpeaker(targetUid: Long, op: Boolean, callback: Callback?)

    /**
     * 踢出房间用户
     * @param targetUid 目标用户的用户ID
     * @param seconds 时间
     * @param callback 成功、失败回调
     */
    fun kickOutUser(targetUid: Long, seconds: Int, callback: Callback?)

    /**
     * 添加踢出房间用户callback
     * @param callback IKickOutCallback，可以提示用户已经提出房间
     */
    fun addUserKickOutCallback(callback: IKickOutCallback?)

    /**
     * 移除踢出房间用户callback
     */
    fun removeUserKickOutCallback()

    /**
     * 获取踢出房间用户callback
     */
    fun getUserKickOutCallback(): IKickOutCallback?

    fun editChannelManager(sid: Long, targetUid: Long, op: Boolean, channelRole: Int, callback: Callback?)

    /**
     * 获取频道角色权限,MutableLiveData返回权限结果
     * @see LpfChannel.ChannelManager.CR_UNKNOWN
     * @see LpfChannel.ChannelManager.CR_OW
     * @see LpfChannel.ChannelManager.CR_MANAGER
     * @see LpfChannel.ChannelManager.CR_SUPER_MANAGER
     * @see LpfChannel.ChannelManager.CR_NORMAL_USER
     */
    fun getChannelRole(sid: Long, uid: Long): MutableLiveData<Int>?

    fun transferChannelManager(sid: Long, uid: Long): MutableLiveData<LiveDataRet<Int>>?

    /**
     * 观测当前频道管理员变化
     */
    fun observeChannelManager(): MutableLiveData<MutableList<LpfChannel.ChannelManager>>?

    /**
     * 获取自己在频道的角色
     * @see LpfChannel.ChannelManager.CR_UNKNOWN
     * @see LpfChannel.ChannelManager.CR_OW
     * @see LpfChannel.ChannelManager.CR_MANAGER
     * @see LpfChannel.ChannelManager.CR_SUPER_MANAGER
     * @see LpfChannel.ChannelManager.CR_NORMAL_USER
     */
    fun getSelfChannelRole(): Int?
}